//给定一个字符串 s 和一个整数 k，从字符串开头算起，每计数至 2k 个字符，就反转这 2k 字符中的前 k 个字符。 
//
// 
// 如果剩余字符少于 k 个，则将剩余字符全部反转。 
// 如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。 
// 
//
// 
//
// 示例 1： 
//
// 
//输入：s = "abcdefg", k = 2
//输出："bacdfeg"
// 
//
// 示例 2： 
//
// 
//输入：s = "abcd", k = 2
//输出："bacd"
// 
//
// 
//
// 提示： 
//
// 
// 1 <= s.length <= 104 
// s 仅由小写英文组成 
// 1 <= k <= 104 
// 
// Related Topics 双指针 字符串 
// 👍 226 👎 0

package com.cute.leetcode.editor.cn;

import java.util.Arrays;

public class ReverseStringIi {
    public static void main(String[] args) {
        Solution solution = new ReverseStringIi().new Solution();
    }
    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public String reverseStr(String s, int k) {
            int len = s.length();
            char[] chars = s.toCharArray();
            // i为开始的下标
            for (int i = 0; i < len ; i += 2*k) {
                int l = i;
                // 对r进行一下判断，超过len了就取len-1 ，否则按照i和k进行取值
                // 这对剩余k个元素也进行了判断
                int r = Math.min(i+k-1, len-1);
                while (l < r){
                    char temp = chars[l];
                    chars[l++] = chars[r];
                    chars[r--] = temp;
                }
            }
            return String.valueOf(chars);
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}